#include "ManejadorImpresionPrueba.h"
#include "EstadisticaPrueba.h"
#include "Puntero.h"
#include <iostream>
using namespace std;

ManejadorImpresionPrueba::ManejadorImpresionPrueba()
{
	cadERROR = "ERROR";
	cadOK = "OK";
	cadNO_IMPLEMENTADA = "NO_IMPLEMENTADA";
}

ManejadorImpresionPrueba::~ManejadorImpresionPrueba()
{
}

void ManejadorImpresionPrueba::ImprimirResultado(TipoRetorno retorno, TipoRetorno retornoEsperado, Cadena comentario) const
{
	cout << endl;
	cout << "----------------------------- Testeo --------------------------------" << endl;
	ImprimirComentario(comentario);
	ImprimirRetorno(retorno, retornoEsperado);
	cout << "---------------------------------------------------------------------" << endl;
}

void ManejadorImpresionPrueba::ImprimirComentario(Cadena comentario)const
{
	if (comentario != "")
		cout << "  Comentario: " << comentario << endl;
}

void ManejadorImpresionPrueba::ImprimirRetorno(TipoRetorno retorno, TipoRetorno retornoEsperado) const
{
	cout << "  Retorno obtenido "<< GetStringRetorno(retorno);
	if (retorno != retornoEsperado)
		cout << ", se esperaba " << GetStringRetorno(retornoEsperado);
	cout << endl;
}

Cadena ManejadorImpresionPrueba::GetStringRetorno(TipoRetorno retorno) const
{
	switch (retorno)
	{
		case OK:
			return cadOK;
		case ERROR:
			return cadERROR;
		default:
			return cadNO_IMPLEMENTADA;
	}
}

void ManejadorImpresionPrueba::ImprimirTotalResultados(const Puntero<EstadisticaPrueba>& estadistica) const
{
	cout << endl;
	cout << "  +------------------------------+" << endl;
	cout << "    Pruebas Correctas : " << estadistica->GetCantidadCorrectas() << endl;
	cout << "    Pruebas Incorrectas: " << estadistica->GetCantidadIncorrectas() << endl;
	cout << "    Pruebas NI: " << estadistica->GetCantidadNoImplementadas() << endl;
	cout << "  +------------------------------+" << endl;
}

bool ManejadorImpresionPrueba::operator==(const ManejadorImpresionPrueba& mip) const
{
	return this == &mip;
}